//当前文件的作用为：设置中间件，用于做短token验证
const { secret } = require("./token"); // 导入token的密钥
const jwt = require("jsonwebtoken"); // 导入token
//设置白名单（不用验证token的接口）
<<<<<<< HEAD
const web = [
  "/tokenLogin",
  "/refresh",
  "/deng",
  "/loginInfo",
  "/switch_img",
  "/switch_lable",
  "/send",
  "/One",
  "/update_password",
];
=======
const web = ["/tokenLogin","/refresh",'/deng','/loginInfo',"/switch_img",'/switch_lable','/uploadimg',"/send","/One"]

>>>>>>> ff4a6e1a53a2b814444f3570fc840071fd2d52ef
//设置一个用来判断是否需要验证token的函数 true 表示需要不验证 false 表示需要验证
const isWhiteList = (url, whiteList) => {
  if (url.indexOf("?") > 0) {
    url = url.split("?")[0];
  }
  return whiteList.find((item) => item === url) ? true : false;
};
//设置中间件验证短token是否有效
const auth = async (req, res, next) => {
  //获取请求的url
  let url = req.url;
  //判断请求的接口是否在白名单中
  if (isWhiteList(url, web)) {
    //如果在，执行下一步
    return await next();
  } else {
    //获取请求头携带的短token
    const accesstoken = req.headers.accesstoken;
    // console.log("========", accesstoken);
    //首先判断是否存在短token
    if (!accesstoken) {
      //如果不存在，返回错误信息
      return res.send({
        code: 401,
        msg: "accessToken不存在",
      });
    } else {
      //短token如果存在，解析token
      await jwt.verify(accesstoken, secret, async (err, data) => {
        if (err) {
          // 如果短token无效，返回错误信息
          return res.send({
            code: 401,
            msg: "accessToken无效",
          });
        } else {
          // 如果有效，执行下一步
          return await next();
        }
      });
    }
  }
};
module.exports = {
  auth,
};
